﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MVCExtension.Office
{
    /// <summary>
    /// 操作Excel类
    /// </summary>
   public static class ExcelHelper
    {
       /// <summary>
       /// DataTable导出Excel
       /// </summary>
       /// <param name="dtData"></param>
       public static void DataTable2Excel(System.Data.DataTable dtData)
       {

           System.Web.UI.WebControls.DataGrid dgExport = null;
           // 当前对话
           System.Web.HttpContext curContext = System.Web.HttpContext.Current;
           // IO用于导出并返回excel文件
           System.IO.StringWriter strWriter = null;
           System.Web.UI.HtmlTextWriter htmlWriter = null;

           if (dtData != null)
           {
               // 设置编码和附件格式
               curContext.Response.ContentType = "application/vnd.ms-excel";
               curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
               curContext.Response.Charset = "utf-8";
               curContext.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmss")));


               // 导出excel文件
               strWriter = new System.IO.StringWriter();
               htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);

               // 为了解决dgData中可能进行了分页的情况，需要重新定义一个无分页的DataGrid
               dgExport = new System.Web.UI.WebControls.DataGrid();
               dgExport.DataSource = dtData.DefaultView;
               dgExport.AllowPaging = false;
               dgExport.DataBind();

               // 返回客户端
               dgExport.RenderControl(htmlWriter);

               curContext.Response.Write(strWriter.ToString());
               curContext.Response.Flush();
               curContext.Response.End();
           }
       }

       /// <summary>
       /// List<T>导出excel
       /// </summary>
       /// <typeparam name="TEntity"></typeparam>
       /// <param name="dtData"></param>
       public static void Export2Excel<TEntity>(this IList<TEntity> dtData)
       {

           System.Web.UI.WebControls.DataGrid dgExport = null;
           // 当前对话
           System.Web.HttpContext curContext = System.Web.HttpContext.Current;
           // IO用于导出并返回excel文件
           System.IO.StringWriter strWriter = null;
           System.Web.UI.HtmlTextWriter htmlWriter = null;

           if (dtData != null)
           {
               // 设置编码和附件格式
               curContext.Response.ContentType = "application/vnd.ms-excel";
               curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
               curContext.Response.Charset = "utf-8";
               curContext.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmss")));


               // 导出excel文件
               strWriter = new System.IO.StringWriter();
               htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);

               // 为了解决dgData中可能进行了分页的情况，需要重新定义一个无分页的DataGrid
               dgExport = new System.Web.UI.WebControls.DataGrid();
               dgExport.DataSource = dtData;
               dgExport.AllowPaging = false;
               dgExport.DataBind();

               // 返回客户端
               dgExport.RenderControl(htmlWriter);

               curContext.Response.Write(strWriter.ToString());
               curContext.Response.Flush();
               curContext.Response.End();
           }
       }



 
    }
}
